package cn.demoncat.util.lunar;

/**
 * 农历工具
 *
 * @author 延晓磊
 * @since 2021年07月13日
 */
public class LunarUtil {


    /**
     * 获取时辰
     *
     * 时辰：中国传统计时单位，把一天平分为十二段，每段叫做一个时辰，对应12地支，合两小时。
     * 对照：子时 23:00-00:59，丑时 01:00-02:59 …… 亥时 21:00-22:59
     *
     * @param hour 时：子时 23-0，丑时 1-2 …… 亥时 21-22
     * @return 时辰：子，丑 …… 亥
     */
    public static String getShiChen(int hour){
        // 获取时辰的地支索引
        int index = 0;
        if (hour != 0 && hour != 23) {
            // 子时 23:00-00:59，其它 01:00-22:59
            index = hour % 2 == 0 ? hour/2 : hour/2 + 1;
        }
        // 获取12地支
        return LunarConstant.DI_ZHI[index];
    }

    /**
     * 获取生肖
     *
     * 生肖：十二生肖，又叫属相，是十二地支的形象化代表（十二种动物），对应人的出生年份。
     * 对照：子（鼠）、丑（牛）、寅（虎）、卯（兔）、辰（龙）、巳（蛇）、午（马）、未（羊）、申（猴）、酉（鸡）、戌（狗）、亥（猪）
     *
     * @param year 年：2020=0=鼠，2021=1=牛
     *
     * @return 生肖：鼠，牛 …… 猪
     */
    public static String getShengXiao(int year){
        // 获取年份的生肖索引
        int index = (year - 4) % 12;
        // 获取12生肖
        return LunarConstant.SHENG_XIAO[index];
    }

    /**
     * 获取干支（甲子）
     *
     * 干支：由10天干和12地支结合，形成60个干支为一轮回，即甲子。
     *
     * @param year 年：2020=6+0=庚子
     *
     * @return 干支：甲子，乙丑 …… 癸亥
     */
    public static String getGanZhi(int year){
        // 获取年份的天干索引
        int gIndex = (year - 4) % 10;
        // 获取年份的地支索引
        int zIndex = (year - 4) % 12;
        // 获取天干地支
        return LunarConstant.TIAN_GAN[gIndex] + LunarConstant.DI_ZHI[zIndex];
    }


}
